<?php
/***************************************************************************
 *   Copyright (C) 2007 by Andrea Blankenstijn, David Dieulivol            *
 *   darkan9el@gmail.com, daviddieulivol5@hotmail.com                      *
 *                                                                         *
 *   All rights reserved.                                                  *
 *   This work is released under the terms of the New BSD License.         *
 *   See LICENSE.BSD file for licensing details                            *
 ***************************************************************************/
/* * *
 * $Id: copyright.class.php 53 2007-10-18 19:17:41Z DarkAn9el $
 * * */

/**
 * \class Copyright
 * \version $Revision: 53 $
 * \date $Date: 2007-10-18 19:17:41 +0000 (Thu, 18 Oct 2007) $
 * \author Andrea Blankenstijn
 */

class Copyright
{
	private $id;         ///< identifiant du copyright
	private $link;       ///< lien associé au copyright
	private $name;       ///< nom du copyright
	private $notice;     ///< message du copyright
	private $pdoProxy;   ///< objet PdoProxy
	private $tCopyright; ///< nom de la table avec préfix

	/**
	 * \brief Retourne un tableau de touts les copyrights.
	 *
	 * Retourne un tableau contenant toutes les informations des copyrights.
	 * Remarque: aucun champ n'est traité avec stripslashes
	 * \param[in] $dbh instance PdoProxy
	 * \param[in] $mustHavePhoto retourner uniquement les copyrights utilisé par au moins une images (bool)
	 * \param[in] $sortCol champs utilisé pour ordrer le jeu de résultats (int)
	 *   - 0 → par ID
	 *   - 1 → par nom
	 *   - 2 → par lien
	 *   - 3 → par texte
	 * \param[in] $limit limiter le nombre de résultats retournés (SQL: LIMIT) (int)
	 * \param[in] $offset ignorer les X premiers résultats (SQL: OFFSET) (int)
	 * \return tableau associatif des copyrights sélectionnés
	 * \return FALSE si la requête n'a retourné aucun résultat
	 */
	public static function listCopyrights(PdoProxy $dbh, $mustHavePhoto = FALSE, $sortCol = 0, $limit = null, $offset = null)
	{
		$tCopyright = $dbh->getPrefix() .'copyrights';

		$limit      = NULL;
		$order      = NULL;
		$where      = NULL;

		// Close WHERE
		if($mustHavePhoto)
			$where = 'WHERE `idCopyrights` IN (SELECT DISTINCT `idCopyrights` FROM `'.$dbh->getPrefix().'photos`)';

		// Close ORDER BY
		if(is_int($sortCol))
		{
			$columns = array('`idCopyrights`', '`name`', '`licenseLink`', '`notice`');
			$order   = 'ORDER BY '. $columns[$sortCol];
		}

		// Close LIMIT/OFFSET
		if(is_int($limit))
		{
			$limit = 'LIMIT '. $limit;
			if(is_int($offset))
				$limit .= ' OFFSET '. $offset;
		}

		if($query = $dbh->query('SELECT * FROM `'.$tCopyright.'` '.$where.' '.$order.' '.$limit.';'))
			return $query->fetchAll(PDO::FETCH_ASSOC);
		else
			return FALSE;
	}

	/**
	 * \brief Constructeur de la classe. Charge les données d'un
	 * copyright si l'on passe son identifiant comme second argument.
	 * \param[in] $dbh instance PDO
	 * \param[in] $idCopyright identifiant du copyright à charger
	 * \see load
	 */
	public function __construct(PdoProxy $dbh, $idCopyright = NULL)
	{
		$this->pdoProxy = $dbh;
    	$this->tAuthors = $dbh->getPrefix() .'copyrights';
	}

	/**
	 * Méthode d'accès à l'attribut name
	 * \return nom du copyright
	 */
	public function getName()
	{
		return $this->name;
	}

	/**
	 * Méthode d'accès à l'attribut notice. Peut effectuer une substitution
	 * de certain champs avec certaines valeurs.
	 * \param[in] $fields tableau de champs à substituer (regexp)
	 * \param[in] $substitues tableau de valeurs de substitue aux champs
	 * \return texte du copyright
	 */
	public function getNotice(array $fields = NULL, array $substitutes = NULL)
	{
		if(!empty($fields) AND !empty($substitutes))
			return regexpNotice($fields, $substitutes);
		else
			return $this->notice;
	}

	/**
	 * Méthode d'accès à l'attribut link
	 * \return lien du copyright
	 */
	public function getLink()
	{
		return $this->link;
	}

	/**
	 * \brief Charge le copyright ayant l'identifiant passé en argument.
	 * \param[in] $id identifiant du copyright
	 * \exception Exception la requête n'a renvoyé aucun résultat
	 */
	public function load($id)
	{
		$request = $pdoProxy->prepare('SELECT `name`,`licenseLink`,`notice` FROM' .
				'`'. $this->tAuthors .'` WHERE `idCopyright` = :id;');
		$request->bindValue(':id', $id, PDO::PARAM_INT);
		$request->execute();

		if($row = $request->fetch())
		{
			$this->id     = $id;
			$this->name   = stripslashes($row['name']);
			$this->link   = stripslashes($row['licenseLink']);
			$this->notice = stripslashes($row['notice']);
		}
		else
			throw new Exception('Le copyright '. $id .' n\'a pas pu être chargé');
	}

	/**
	 * Effectue la substitution des champs de notice
	 * \param[in] $fields tableau de champs (regexp)
	 * \param[in] $substitutes valeurs de substitus
	 * \return notice avec les champs substitués
	 */
	private function regexpNotice(array $fields, array $substitutes)
	{
		$notice = preg_replace($fields, $substitutes, $this->notice);
		return $notice;
	}
}
?>
